// #include <stdio.h>
// #include <time.h>
// #include "abstract.hpp"
// #include "detail.hpp"
// #include "fields.hpp"
// #include "message.hpp"
// // #define LOG(format, msg)                                                        \
// //     {                                                                           \
// //         time_t t = time(NULL);                                                  \
// //         struct tm *lt = localtime(&t);                                          \
// //         char time_tmp[32] = {0};                                                \
// //         strftime(time_tmp, 31, "%y-%m-%d %T", lt);                              \
// //         printf("[%s] [%s:%d] " format "\n", time_tmp, __FILE__, __LINE__, msg); \
// //     }

// int main()
// {
//     // MessageRequest 的测试

//     // bitrpc::RpcRequest::ptr rpc1 = bitrpc::MessageFactory::create<bitrpc::RpcRequest>();
//     // rpc1->setMethod("Add");
//     // Json::Value val;
//     // val["num1"] = 1;
//     // val["num2"] = 2;
//     // rpc1->setParams(val);
//     // std::string str = rpc1->serialize();
//     // std::cout << str << std::endl;

//     // bitrpc::BaseMessage::ptr bmp = bitrpc::MessageFactory::create(bitrpc::MType::REQ_RPC);
//     // bool ret = bmp->unserialize(str);
//     // if (ret == false)
//     //     return -1;
//     // ret = bmp->check();
//     // if (ret == false)
//     //     return -1;
//     // bitrpc::RpcRequest::ptr rpc2 = std::dynamic_pointer_cast<bitrpc::RpcRequest>(bmp);
//     // std::cout << rpc2->method() << std::endl;
//     // std::cout << rpc2->params()["num1"].asInt() << std::endl;
//     // std::cout << rpc2->params()["num2"].asInt() << std::endl;

//     // 序列化
//     // bitrpc::TopicRequest::ptr trp1 = bitrpc::MessageFactory::create<bitrpc::TopicRequest>();
//     // trp1->setTopicKey("news");
//     // trp1->setOptype(bitrpc::TopicOptype::TOPIC_PUBLISH);
//     // trp1->setTopicMsg("Hello world");
//     // std::string str = trp1->serialize();
//     // std::cout << str << std::endl;

//     // // 反序列化
//     // trp1->clear();
//     // bool ret = trp1->unserialize(str);
//     // if (!ret)
//     //     return -1;
//     // ret = trp1->check();
//     // if (!ret)
//     //     return -1;

//     // std::cout << trp1->topicKey() << std::endl;
//     // std::cout << (int)trp1->optype() << std::endl;
//     // std::cout << trp1->topicMsg() << std::endl;

//     // bitrpc::ServiceRequest::ptr trp1 = bitrpc::MessageFactory::create<bitrpc::ServiceRequest>();
//     // trp1->setMethod("Add");
//     // trp1->setOptype(bitrpc::ServiceOptype::SERVICE_REGISTRY);
//     // trp1->setHost(std::make_pair("127.0.0.1", 9090));
//     // std::string str = trp1->serialize();
//     // std::cout << str << std::endl;

//     // // 反序列化
//     // trp1->clear();
//     // bool ret = trp1->unserialize(str);
//     // if (!ret)
//     //     return -1;
//     // ret = trp1->check();
//     // if (!ret)
//     //     return -1;

//     // std::cout << trp1->method() << std::endl;
//     // std::cout << (int)trp1->optype() << std::endl;
//     // std::cout << trp1->host().first << std::endl;
//     // std::cout << trp1->host().second << std::endl;

//     // return 0;

//     // MessageResponse的测试
//     // bitrpc::RpcResponse::ptr trp1 = bitrpc::MessageFactory::create<bitrpc::RpcResponse>();
//     // trp1->setRCode(bitrpc::RCode::RCODE_OK);
//     // trp1->setResult(33);
//     // std::string str = trp1->serialize();
//     // std::cout << str << std::endl;

//     // // 反序列化
//     // trp1->clear();
//     // bool ret = trp1->unserialize(str);
//     // if (!ret)
//     //     return -1;
//     // ret = trp1->check();
//     // if (!ret)
//     //     return -1;

//     // std::cout << (int)trp1->rcode() << std::endl;
//     // std::cout << trp1->result() << std::endl;

//     bitrpc::ServiceResponse::ptr trp1 = bitrpc::MessageFactory::create<bitrpc::ServiceResponse>();
//     trp1->setRCode(bitrpc::RCode::RCODE_OK);
//     trp1->setMethod("Add");
//     trp1->setOptype(bitrpc::ServiceOptype::SERVICE_DISCOVERY);
//     std::vector<bitrpc::Address> addrs;
//     addrs.push_back(bitrpc::Address("192.168.32.0", 9090));
//     addrs.push_back(bitrpc::Address("192.168.32.1", 9090));
//     trp1->setHost(addrs);
//     std::string str = trp1->serialize();
//     std::cout << str << std::endl;

//     // 反序列化
//     trp1->clear();
//     bool ret = trp1->unserialize(str);
//     if (!ret)
//         return -1;
//     ret = trp1->check();
//     if (!ret)
//         return -1;

//     std::cout << (int)trp1->rcode() << std::endl;
//     std::cout << (int)trp1->optype() << std::endl;
//     std::cout << trp1->method() << std::endl;

//     // 重载了一个 打印主机名的重载函数
//     std::cout << trp1;
//     return 0;
// }